package br.com.sovi.resources.cerca;

import java.util.List;

import org.openinsula.vulcano.orm.command.DaoCommandWithoutResult;

import br.com.sovi.persistence.Cerca;
import br.com.sovi.persistence.Dispositivo;
import br.com.sovi.persistence.Ponto;
import br.com.sovi.resources.FindDispositivoBySerialCommand;

public class PersistCercaCommand extends DaoCommandWithoutResult {

	private final CercaVO cercaVO;

	public PersistCercaCommand(CercaVO cercaVO) {
		this.cercaVO = cercaVO;
	}

	@Override
	public void executeWithoutResult() {
		FindDispositivoBySerialCommand findDispositivoBySerialCommand = new FindDispositivoBySerialCommand(cercaVO
				.getDispositivo());
		findDispositivoBySerialCommand.setDao(dao);

		Dispositivo dispositivo = findDispositivoBySerialCommand.execute();

		if (dispositivo == null) {
			throw new RuntimeException("Dispositivo não encontrado!");
		}

		if (dispositivo.getCerca() != null) {
			List<Ponto> pontos = dispositivo.getCerca().getPontos();

			for (Ponto ponto : pontos) {
				dao.remove(ponto);
			}

			dispositivo.getCerca().getPontos().clear();
		}

		Cerca cerca = cercaVO.toBean(dispositivo);

		dao.persist(cerca);
	}

}
